// 栈类
function Stack() {
  // 栈中的属性
  let items = [];
  // 栈相关的方法
  // 压栈操作
  this.push = function (element) {
    items.push(element);
  };
  // 出栈操作
  this.pop = function () {
    return items.pop();
  };
  // peek操作
  this.peek = function () {
    return items[items.length - 1];
  };
  // 判断栈中的元素是否为空
  this.isEmpty = function () {
    return items.length == 0;
  };
  // 获取栈中元素的个数
  this.size = function () {
    return items.length;
  };
}

// 封装十进制转二进制的函数
function dec2bin(decNumer) {
  // 定义变量
  let stack = new Stack();
  let remainder;
  // 循环除法
  while (decNumer > 0) {
    remainder = decNumer % 2;
    decNumer = Math.floor(decNumer / 2);
    stack.push(remainder);
  }
  // 将数据取出
  let binayrString = "";
  while (!stack.isEmpty()) {
    binayrString += stack.pop();
  }
  return binayrString;
}
console.log("10->2进制", dec2bin(10));
console.log("20->2进制", dec2bin(20));

// 判断一个序列是否为合理的出栈顺序
// 例如1，2，3，4，5是入栈顺序，那4，5，3，2，1是一种合理的出栈顺序，4，3，5，1，2则不是一种合理的出栈顺序
// pushV是入栈顺序的数组，popV是要判断的出栈顺序数组
function IsPopOrder(pushV, popV) {
  const stack = [];
  pushV.forEach((item) => {
    if (item === popV[0]) {
      popV.shift();
      while (stack.length && stack[stack.length - 1] === popV[0]) {
        stack.pop();
        popV.shift();
      }
    } else {
      stack.push(item);
    }
  });
  return !stack.length && !popV.length;
}
console.log(IsPopOrder([1, 2, 3, 4, 5], [4, 5, 3, 2, 1]));
